package com.clear.honghefinance.biz.modules.system.role.service;

import com.clear.honghefinance.biz.modules.system.role.domain.dto.*;
import com.clear.honghefinance.biz.modules.system.role.domain.dto.*;
import com.clear.honghefinance.biz.modules.system.role.domain.entity.SysRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.clear.honghefinance.biz.modules.system.role.domain.vo.GetSysRoleDetailVO;
import com.clear.honghefinance.biz.modules.system.role.domain.vo.ListRoleBindMenuVO;
import com.clear.honghefinance.biz.modules.system.role.domain.vo.ListSysRoleVO;
import com.clear.honghefinance.common.dto.entity.PageResult;

import java.util.List;

/**
 * <p>
 * 系统角色 服务类
 * </p>
 *
 * @author 程序员clear
 * @since 2024-08-15
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * 新增角色
     *
     * @param dto req
     * @return
     */
    boolean create(CreateSysRoleDTO dto);

    /**
     * 修改角色
     *
     * @param dto req
     * @return
     */
    boolean update(UpdateSysRoleDTO dto);

    /**
     * 删除角色
     *
     * @param dto req
     * @return
     */
    boolean delete(DeleteSysRoleDTO dto);

    /**
     * 禁用或启用角色
     *
     * @param dto req
     * @return
     */
    boolean updateDisable(UpdateSysRoleStateDTO dto);

    /**
     * 查看角色列表
     *
     * @param dto req
     * @return
     */
    PageResult<ListSysRoleVO> list(ListSysRoleDTO dto);

    /**
     * 查看角色明细
     *
     * @param id 角色id
     */
    GetSysRoleDetailVO getDetailById(int id);

    /**
     * 角色绑定菜单
     *
     * @param dto req
     * @return
     */
    boolean roleBindMenu(RoleBindMenuDTO dto);

    /**
     * 查看当前登录用户角色绑定的菜单列表（用户绑定的角色可能有很多）
     *
     * @return
     */
    List<ListRoleBindMenuVO> listRoleBindMenu();


    /**
     * 角色绑定资源
     *
     * @param dto req
     * @return
     */
    boolean roleBindResource(RoleBindResourceDTO dto);

    /**
     * 将所有角色绑定的菜单列表刷写到缓存（通过定时任务触发）
     */
    void setSysRoleBindMenuCache();

    /**
     * 将所有角色绑定的资源列表刷写到缓存（通过定时任务触发）
     */
    void setSysRoleBindResourceCache();
}
